/*     公共方法文件     */
/**
 * 
 * 处理数据中包含的 html 标签
 * 1.把所有的 img 标签都用 '[图片]' 代替
 * 2.把所有 <> 包裹的标签都转 空
 * 3.把所有的空格，转成 空
 * 
 * **/
export function removeHtmlTag(str) {
    let html = str
        .replace(/<img.*?>/g, '[图片]')
        .replaceAll(/<[^>]+>/g, '')
        .replace(/&nbsp;/gi, '')
    return html
}

import { cloneDeep } from 'lodash'
export const songFun = {
    /**
     *  bigTree页面 分解后端返回的数据结构，组合成组件需要的结构
     *  2种方法，第一是直接分解组合; 第二是结合组件prop属性分解结合
     * **/
    tranSation(res) {
        let leve1 = []
        let nodeArry = []
        leve1 = res.datas.filter(item => item.type == 1)
        leve1.forEach(item => {
            let obj = { id: 0, label: '', children: [] }
            let chidBefor = []
            obj.id = item.id
            obj.label = item.name
            chidBefor = res.datas.filter(jk => jk.type == item.cid)
            chidBefor.forEach(kg => {
                let cObj = { id: 0, label: '' }
                cObj.id = kg.id
                cObj.label = kg.name
                obj.children.push(cObj)
            })
            nodeArry.push(obj)
        })
        console.log('nodeArry', nodeArry);
        return nodeArry
    },
    usePropsAtrr(res) {
        let level1 = [], level2 = []
        res.datas.forEach(ele => {
            if (ele.type == 1) {
                level1.push(ele)
            } else {
                level2.push(ele)
            }
        })
        level1.forEach(item => {
            item.children = []
            item.children = level2.filter(jk => {
                return jk.type == item.cid
            })

        })
        return level1
    },
    /**
     *  判断 对象所有属性 值 是不是都为空
     * **/
    isEmpty(newObj) {
        return Object.keys(newObj).every(item => newObj[item] == undefined || newObj[item] == null || newObj[item] == '')
    },
    /**
     * ☆☆☆☆☆
     * 知识点: 递归, lodashjs 插件进行深拷贝
     * 
     * 匹配前后端菜单路由规则。返回 根据后端字段匹配出的前端路由完整规则 , menu: 前端菜单路由规则  dymenu:后端菜单路由规则
     * 前 [{1,2,3},{3,4,5}] 后 [{1,2}]  ==>  [{1,2}]
     *      递归思想：对于出现重复操作时，可以自己调用自己。
     * **/
    menuRoteSure(menu, dymenu) {
        let newArry = []
        let cloneMenu = cloneDeep(menu)  //  使用 lodashjs 插件进行深拷贝, 用拷贝之后的数据去操作; 因为：menu 中包含方法，不能使用 Json.parse(Json.strigify(menu))
        cloneMenu.forEach(ele => {
            dymenu.forEach(dyele => {
                if (ele.meta.title == dyele.name) {
                    if (dyele.children && dyele.children.length > 0) {  // 此时需要 '递归' 对里面的子数组进行遍历对比，并返回新数组 替换前端路由规则中的子数组
                        // 会有BUG：这一步赋值会直接改变前端菜单路由规则的原数据，因为没有使用深拷贝。
                        // 这会导致页面不刷新的情况下，切换角色账号登录时，返回的数据有问题.
                        ele.children = songFun.menuRoteSure(ele.children, dyele.children)  //  传入前端、后端子集路由规则，返回值替换前端子集
                    }
                    newArry.push(ele)
                }
            })
        })
        return newArry
    },
    /**
     * 传入普通对象，逐一修改属性值  格式数字 20455 ---> 20,455
     * **/
    munHandle(val) {  
        if (!val) return
        for (let key in val) {
            if (!val[key]) return
            val[key] = val[key].toLocaleString();
        }
    }
}
